﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Descriptions_DomainModel.Model;
using System.Linq;
using System.Text;
using CommonClasses.Model;

namespace CycleGram
{
    public partial class CycleGramControl : UserControl
    {

        public CycleGramControl()
        {            
            InitializeComponent();

            //this.NumTactsUD.Value = TactCountDef;
            this.vScrollBar.Visible = false; this.vScrollBar.Maximum = this.Width;
            this.hScrollBar.Visible = false; this.hScrollBar.Maximum = this.Height;

            this.Dock = DockStyle.Fill;


            //((Bitmap)SaveSeqBtn.Image).MakeTransparent(Color.FromArgb(255, 0, 255));
            //((Bitmap)CanselSeqBtn.Image).MakeTransparent(Color.FromArgb(255, 0, 255));
            //((Bitmap)ShowLegendBtn.Image).MakeTransparent(Color.FromArgb(255, 0, 255));

            //toolTip.SetToolTip(SaveSeqBtn, "Запомнить текущие графики");
            //toolTip.SetToolTip(CanselSeqBtn, "Восстановить последние запомненные графики");
        }

        /*#region вместо NodesPnl.SuspendLayout()/ResumeLayout();

        private void NodesPnl_BeginLayout()
        {
            NodesPnl.SuspendLayout();
        }

        private void NodesPnl_EndLayout()
        {
            NodesPnl.ResumeLayout();
            NodesPnl.Update();
        }
        #endregion

        private void NodesPnl_Layout(object sender, LayoutEventArgs e)
        {
            // событие нехорошее: приходится отлавливать случаи,
            // когда окно свернуто и созданы ли CycleEditControl'ы
            // if (NumLayoutCalls++ > 100) { MessageBox.Show("100 Layouts"); NumLayoutCalls = 0; }
            if ((CEControls.Count == 0)) return;

            // проверим видимость vScroollBar
            if (VirtPanelHeight > NodesPnl.Bounds.Height)// в VirtPanelHeight уже входят DownPnl.Height и UpPnl.Height
            {
                this.vScrollBar.Maximum = VirtPanelHeight;
                this.vScrollBar.LargeChange = NodesPnl.Bounds.Height;
                this.vScrollBar.SmallChange = vScrollPixScale;
                this.vScrollBar.Visible = true;
            }
            else
            {
                if (vScrollBar.Value != 0)
                {
                    int OldValue = vScrollBar.Value;
                    vScrollBar.Value = 0;

                    vScrollBar_Scroll(this, new ScrollEventArgs(ScrollEventType.EndScroll, OldValue, 0));
                }
                vScrollBar.Visible = false;
            }

            // вот теперь не считаем ширину всех CycleEditControl'ов одинаковой !
            int MaxGridX = MaxCEGridX();
            TactCountVisible = (NodesPnl.Bounds.Width
                - CExOffset - MaxGridX) / ItemSize.Width + 1;

            this.MinimumSize = new Size(NodesPnl.Left + MaxGridX + 300, this.MinimumSize.Height);

            // проверим видимость hScroollBar
            if (CExOffset + MaxGridX + TactCount * ItemSize.Width > NodesPnl.Bounds.Width) // LeftPnl.Width входит в CExOffset
            {
                this.hScrollBar.Maximum = TactCount;//CExOffset + CycleEditControls[0].Size.Width;
                this.hScrollBar.LargeChange =
                (NodesPnl.Bounds.Width
                - CExOffset - MaxGridX) / ItemSize.Width;//NodesPnl.ClientRectangle.Width;

                this.hScrollBar.SmallChange = 1;//vScrollPixScale;
                this.hScrollBar.Left = MaxGridX + CExOffset + 1;
                this.hScrollBar.Size = new Size(DownPnl.Width - hScrollBar.Left - 4, hScrollBar.Height);
                this.hScrollBar.Visible = true;
            }
            else
            {
                if (hScrollBar.Value != 0)
                {
                    int OldValue = hScrollBar.Value;
                    hScrollBar.Value = 0;

                    hScrollBar_Scroll(this, new ScrollEventArgs(ScrollEventType.EndScroll, OldValue, 0));

                }
                hScrollBar.Visible = false;
            }

            // скроль должен оставаться на последней странице, если ее расширяют
            // то есть, Value должен уменьшаться
            if (vScrollBar.Value + vScrollBar.LargeChange > vScrollBar.Maximum + 1)
            {
                int OldValue = vScrollBar.Value;
                vScrollBar.Value = vScrollBar.Maximum - vScrollBar.LargeChange + 1;
                ScrollyCEs(-vScrollBar.Maximum + vScrollBar.LargeChange - 1 + OldValue);
            }

            if (hScrollBar.Value + hScrollBar.LargeChange > hScrollBar.Maximum + 1)
            {
                int dx = -hScrollBar.Maximum + hScrollBar.LargeChange - 1 + hScrollBar.Value;

                hScrollBar.Value = hScrollBar.Maximum - hScrollBar.LargeChange + 1;
                ScrollxCEs(dx * ItemSize.Width);
            }
        }

        private void vScrollBar_Scroll(object sender, ScrollEventArgs e)
        {
            int dy = (-e.NewValue + e.OldValue);
            ScrollyCEs(dy);
        }

        private void hScrollBar_Scroll(object sender, ScrollEventArgs e)
        {
            //скроллируем только Grid'ы CycleEditControl'ов, они это сами сделают и ширину изменят 
            int dx = (-e.NewValue + e.OldValue) * ItemSize.Width;
            ScrollxCEs(dx);
        }


        private void ScrollxCEs(int dx)
        {
            NodesPnl_BeginLayout();

            foreach (CycleEditControl CE in CEControls)
                CE.MyHScroll(dx);
            TactBar.MyHScroll(dx);

            NodesPnl_EndLayout();
        }

        private void ScrollyCEs(int dy)
        {
            NodesPnl_BeginLayout();

            foreach (CycleEditControl CE in CEControls)
                CE.MyVScroll(dy);

            NodesPnl_EndLayout();
        }
         */ 
       

    }// end of class CycleGramForm
}